CELP

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

Кодирование на основе линейного предсказания и кодового возбуждения (англ. Code Excited Linear Prediction, CELP) представляет собой алгоритм кодирования речи, первоначально предложенный Манфредом Шрёдером и Б. С. Аталом в 1985 году. В то время алгоритм обеспечивал значительно лучшее качество, чем существовавшие тогда алгоритмы с низким битрейтом, такие, как аудиокодеки RELP и LPC (например, FS-1015). Наряду с вариантами, как, например, ACELP, RCELP, LD-CELP и VSELP, на сегодня это наиболее широко используемый алгоритм кодирования речи. CELP в настоящее время используется как общий термин для класса алгоритмов, а не для определенного кодека.

Введение

Алгоритм CELP базируется на четырех основных идеях:

  • Использование модели источника-фильтра для воспроизведения речи на основе линейного предсказания (ЛП);
  • Использование адаптивной и фиксированной кодовых таблиц в качестве базы для модели линейного предсказания;
  • Замкнутый поиск в «перцептуально взвешенном домене».
  • Применение векторного квантования (VQ)

Оригинальный алгоритм Шредера и Атала в 1983 году, при запуске на суперкомпьютере Cray I, требовал 150 секунд для кодирования речевого сигнала длиной 1 секунду. С возникновением более эффективных способов реализации таблиц кодов и совершенствованием вычислительных возможностей- запуск алгоритма стал возможен во встраиваемых устройствах, таких как мобильные телефоны.

CELP декодер

Рисунок 1: CELP декодер

Прежде, чем исследовать сложный процесс кодирования CELP мы рассмотрим принцип работы декодера. Иллюстрация описывает универсальный декодер CELP. Возбуждение производится через суммирование вкладов от адаптивной (иначе тактовой) таблицы кодов и фиксированной (иначе стохастической) таблицы кодов:

[math]\displaystyle{ e[n]=e_a[n]+e_f[n] }[/math]

где [math]\displaystyle{ e_{a}[n] }[/math] является адаптивным (тактовым) взносом таблицы кодов и [math]\displaystyle{ e_{f}[n] }[/math] является фиксированным (стохастическим) вкладом таблицы кодов. Фиксированная таблица кодов- векторный словарь квантования, который является (неявно или явно) жестко закодированным в кодек. Эта таблица кодов может быть алгебраической ACELP или сохраненной явно (например. Speex). Записи в адаптивной таблице кодов состоят из отсроченных версий возбуждения. Это позволяет эффективно кодировать периодические сигналы, такие как человеческая речь.

У фильтра, который формирует возбуждение, есть все полюса модели в форме [math]\displaystyle{ 1/A(z) }[/math], где [math]\displaystyle{ A(z) }[/math]-называется фильтром прогнозирования и получения, с применением линейного прогнозирования алгоритм Левинсона-Дарбина (Levinson-Durbin). Этот фильтр применим не только потому что использует все полюса, но и потому что его легко вычислить и это хорошее представление человеческого голоса.

Кодер CELP

Основной принцип, заключённый в основе CELP, называют (Абсолютным) «Анализом через синтез», что означает, что кодирование (анализ) выполнено перцепционно, оптимизируя декодированный сигнал в замкнутом цикле. В теории, лучший поток CELP был бы произведён в результате комбинаций всех возможных наборов двоичных знаков и выбором того, который производит декодированный сигнал наилучшего звучания. Это, очевидно, невозможно по двум причинам: сложность реализации выше любых доступных в настоящее время аппаратных средств, и критерий отбора «лучшее звучание» подразумевает человека в качестве слушателя.

Чтобы осуществить кодирование в реальном времени, используя ограниченные вычислительные ресурсы, поиск CELP разбит на мелкие, более управляемые, последовательные поиски, используя простую перцептуальную функцию надбавки. Как правило, кодирование выполнено в следующем порядке:

  • Линейные Коэффициенты Предсказания (ЛКП) вычислены и квантованы, обычно как LSP
  • Происходит поиск по адаптивной (тактовой) таблице кодов, и её содействие/взнос/ удаляется
  • Поиск по фиксированной (стохастической) таблице кодов

Искажение шумом

Большинство (если не все) современные звуковые кодеки пытаются сформировать искажение в кодировании так, чтобы оно проявилось главным образом в тех частотных областях, где его не может уловить человеческое ухо. Например, ухо более терпимо к искажению в частях звукового диапазона, которые громче и наоборот. Именно поэтому вместо минимизации квадратичной ошибки, CELP минимизирует ошибки на взвешенной области. Взвешивающий результат по кривой W (z), как правило, вытекает из фильтра ЛКП при помощи расширения полосы пропускания:

[math]\displaystyle{ W(z) = \frac{A(z/\gamma_1)}{A(z/\gamma_2)} }[/math]

где [math]\displaystyle{ \gamma_1 \gt \gamma_2 }[/math].

Ссылки